import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.lang.Math.*;

/**
 * Write a description of class Circular here.
 * 
 * @author Rolando delgado Salcedo
 * @version version 1
 */
public class Circular extends Obstaculo
{
    /**
     * Act - do whatever the Circular wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    private int x, y;//coordenadas con respecto a quien va a girar
    private boolean band=false;//bandera para llamar solamente una ves al metodo calcularadio
    private double radio;//variable de radio
    private double angulo,angRad;//variable de angulo en grados y angRad variable de angulo en radianes
    /**
     * constructor de la clase circular 
     * @param x coordenada en x
     * @param y coordenada en y
     */
    public Circular(int x,int y)
    {
        this.x=x;
        this.y=y;
        angulo=0;
       
    }
    /**
     * metodo actua el que mueve y calcula el radio
     */
    public void act() 
    {
        
         if(!band)
            calculaRadio();
        mover();
        
    }  
    /**
     * metodo que calcula el radio
     */
    public void calculaRadio()
    {
        double xr,yr,c;//xr,yr coordenadas del radio tomandolo desde el origen y c es un auxiliar
        xr=super.getX()-x;
        yr=super.getY()-y;
       c=xr*xr+yr*yr;
       radio=Math.sqrt(c);
       band=true;
       angulo=Math.atan(yr/xr);
       angulo=-(angulo*180/Math.PI);
       if(xr<0&&yr<0)
            angulo=angulo+180;
       if(xr<0&&yr>0)
            angulo=angulo+180;
       if(xr>0&&yr<0)
            angulo=angulo+360;
       
    }
    /**
     * metodo de mover
     */
    public void mover()
    {
        double xn,yn;
        angulo--;
        angulo--;
        if(angulo<=0)
            angulo=360;
        angRad=Math.toRadians(angulo);
        xn=Math.cos(angRad)*radio;
        yn=Math.sin(angRad)*radio;
        if(radio>=0 && radio<90 )
            super.setLocation(x+(int)xn,y-(int)yn);
        if(radio>=90 && radio<180 )
            super.setLocation(x-(int)xn,y-(int)yn);
        if(radio>=180 && radio<270 )
            super.setLocation(x-(int)xn,y+(int)yn);
        if(radio>=270 && radio<360 )
            super.setLocation(x+(int)xn,y+(int)yn);
    }
}
